[id].ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { defineEventHandler, EventHandlerRequest } from 'h3';
  2. import { DB } from '~~/server/db/DB';
  3. import { createErrorResponse, createSuccessResponse, IResponse } from '~~/server/utils/response';
  4. export interface IChannel {
  5. id: number;
  6. model_id: number;
  7. parent_id: number;
  8. name: string;
  9. type: 'list'|'link',
  10. url: string;
  11. outlink: string;
  12. diyname: string;
  13. }
  14. export default defineEventHandler<EventHandlerRequest, Promise<IResponse<IChannel & {
  15. childs: IChannel[];
  16. parents: IChannel[];
  17. }>>>(async (event) => {
  18. try {
  19. const id = event.context.params?.id;
  20. const query = getQuery(event);
  21. const onlyNavVisible = query.onlyNavVisible === 'true';
  22. if (!id)
  23. return createErrorResponse('分类ID不能为空');
  24. const category = await DB.table('pr_cms_channel')
  25. .where('id', id)
  26. .where('status', 'normal')
  27. .first();
  28. if (!category)
  29. return createErrorResponse('分类不存在');
  30. const query2 = DB.table('pr_cms_channel')
  31. .where('status', 'normal')
  32. .where('parent_id', id)
  33. .orderBy('weigh', 'desc')
  34. .orderBy('id', 'desc');
  35. if (onlyNavVisible)
  36. query2.where('isnav', 1);
  37. const childs = await query2.get();
  38. const parents : IChannel[] = [];
  39. let parentId = category.parent_id;
  40. while (parentId) {
  41. const parent = await DB.table('pr_cms_channel')
  42. .where('id', parentId)
  43. .where('status', 'normal')
  44. .first();
  45. if (!parent)
  46. break;
  47. parents.push(parent);
  48. parentId = parent.parent_id;
  49. }
  50. category.parents = parents;
  51. category.childs = childs;
  52. return createSuccessResponse(category);
  53. } catch (error) {
  54. return createErrorResponse(error);
  55. }
  56. });